package com.moxiao.yfjh.module.system.sms.client;

import cn.hutool.json.JSONObject;
import com.moxiao.yfjh.framework.common.util.http.HttpUtils;
import com.moxiao.yfjh.framework.common.util.json.JsonUtils;
import com.moxiao.yfjh.framework.common.util.md5.Md5Utils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.List;
import java.util.Map;

/**
 * @version 1.0
 * @Author zhk
 * @Date 2023/11/10 14:04
 **/
@Component
public class SmsApi {
    @Value("${sms.yunqixun.account}")
    private String account;

    @Value("${sms.yunqixun.apikey}")
    private String apikey;

    @Value("${sms.yunqixun.url}")
    private String url;

    /**
     * 生成签名摘要
     *
     * @return
     */
    private String getSign(){
        return Base64.getEncoder().encodeToString(Md5Utils.EncodeByMD5(account + apikey).getBytes(StandardCharsets.UTF_8));
    }

    /**
     * 发送单条短信
     *
     * @param mobile    手机号码
     * @param text      短信内容
     * @return
     */
    public String singleSend(String mobile, String text){
        String postUrl = url + "/v1/sms/single_send";

        JSONObject sendParams = new JSONObject();
        sendParams.put("account", account);
        sendParams.put("mobile", mobile);
        sendParams.put("text", text);
        sendParams.put("sign", getSign());

        return HttpUtils.sendPost(postUrl, JsonUtils.toJsonString(sendParams));
    }

    /**
     * 批量发送短信
     *
     * @param mobiles       手机号码集合
     * @param text          短信内容
     * @return
     */
    public String batchSend(List<String> mobiles, String text){
        String postUrl = url + "/v1/sms/batch_send";

        JSONObject sendParams = new JSONObject();
        sendParams.put("account", account);
        sendParams.put("mobile", StringUtils.join(mobiles, ","));
        sendParams.put("text", text);
        sendParams.put("sign", getSign());

        return HttpUtils.sendPost(postUrl, JsonUtils.toJsonString(sendParams));
    }

    /**
     * 多号码多内容发送接口
     *
     * @param params    数据集合：[{"mobile": "", "text": ""}, {"mobile": "", "text": ""}]
     * @return
     */
    public String multiSend(List<Map<String, String>> params){
        String postUrl = url + "/v1/sms/multi_send";

        JSONObject sendParams = new JSONObject();
        sendParams.put("account", account);
        sendParams.put("data", params);
        sendParams.put("sign", getSign());


        return HttpUtils.sendPost(postUrl, JsonUtils.toJsonString(sendParams));
    }
}
